1
代码即数据:Elixir 的同像性本质
AI019Lesson 10
00:00

同像性的本质

同像性语言:一种其内部表示形式直接以该语言自身表达的语言。在 Elixir 中,源代码不仅仅是文本;它是一个嵌套的数据结构,称为 抽象语法树(AST)

1. 表示的逻辑规则

Elixir 通过将基本字面量直接表示为自身来简化抽象语法树。原子、数字、列表(包括关键字列表)、二进制数据以及两个元素的元组,在内部都无需复杂包装即可表示。

iex> quote do: [do: 1]
[do: 1]
iex> quote do: "binaries"
"binaries"

2. 抽象语法树的元组结构

大多数代码转换都会生成一个三元素元组: {函数名, 元数据, 参数}。例如,一个函数调用如 1 + 2 会变为 {:+, [line: 1], [1, 2]}。这使得语言能够将 代码视为数据

3. 宏:延迟执行

宏是“通过将代码注入程序内部表示中,从而推迟语句执行的一种方式。”与标准函数在调用前评估参数不同,宏接收的是 之前 调用时,宏接收的是 原始抽象语法树,从而可在编译前进行逻辑注入。

$$\text{源代码} \xrightarrow{\text{quote}} \text{AST 元组} \xrightarrow{\text{宏}} \text{转换后的 AST}$$

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>